Tabla de contenidos

  1. Problema al que nos enfrentamos
  1. Comprensión de los datos
  1. Preparación de los datos
  1. Modelado (Práctica 2)
  1. Conclusiones
  1. Bibliografía

Problema al que nos enfrentamos:

Las enfermedades cardiovasculares (ECV) o cardiovasculopatías, más comúnmente conocidas como enfermedades del corazón, son la primera causa de muerte a nivel global, causantes de 17,9 millones de muertes sólo durante el año 2015, lo que supuso un 32,1% del total de muertes de ese año, con lo cual, es un tema que puede resultar muy interesante para cualquiera, dado que todos tenemos riesgo de sufrir una ECV, y sobretodo, a nivel estadístico, cualquiera de nosotros puede fallecer a causa de una ECV. Las cariovasculopatías más comunes son la cardiopatía coronaria, la insuficiencia cardíaca, las arrítmias, la hipertensión, etc.

Por suerte, conocemos muchos factores de riesgo de éste tipo de enfermedades, con lo cual, si obtenemos información sobre éstos factores de riesgo, podemos utilizar la minería de datos para realizar una predicción acerca de si un paciente tiene una elevada probabilidad de sufrir una ECV, de modo que se puedan realizar tareas de prevención para reducir su probabilidad de enfermedad o, en última instancia, de fallecimiento.

Fuente 1, Fuente 2

Comprensión de los datos:

Para poder realizar tareas de predicción, lo primero de todo es poder conseguir datos de pacientes que nos indiquen distintos marcadores que sabemos que pueden ser factores de riesgo para desarrollar una ECV. Para conseguirlo, hemos buscado un dataset que cumpliese con nuestras expectativas y que, a su vez, nos permitiese realizar un correcto análisis y modelado de los datos.

El dataset utilizado es Heart Failure Prediction Dataset que podemos hallar en el repositorio de datasets de kaggle. A continuación realizaremos una descripción y exploración de los datos en profundidad.

Importación de los datos

Figura 1

Descripción del conjunto de datos

1. Age: Edad del paciente (años)

2. Sex: Género del paciente (M: Hombre, F: Mujer)

3. ChestPainType: Tipo de dolor de pecho (TA: Dolor típico de angina, ATA: Dolor atípico de angina, NAP: Sin dolor de angina, ASY: Asintomático)

4. RestingBP: Presión sangínea en reposo (en milímetros de mercurio [mm Hg])

5. Cholesterol: Nivel de colesterol en sangre (en milímetros por decilitro [mm/dl])

6. FastingBS: Nivel de azucar en sangre en ayunas (1: Nivel de azucar superior a 120 mg/dl, 0: Nivel de azucar inferior a 120 mg/dl)

7. RestingECG: Resultados de electrocardiograma en reposo (Normal: Normal, ST: Onda ST-T anormal [inversiones en la onda T y/o elevación o depresión del segmento ST superiores a 0.05 mV], LVH: Hipertrofia ventricular ya sea de forma clara o probavle [siguiendo el criterio de Estes]

8. MaxHR: Máximo pulso cardíaco conseguido (valor numérico entre 60 y 202)

9. ExerciseAngina: Angina inducida mediante ejercicio (Y: Sí, N: No)

10. Oldpeak: Segmento T (Valor numérico del segmento T)

11. ST_Slope: Elevación del segmento T en el pico del ejercicio (UP: Elevación positiva, Flat: Elevación neutra, Down: Elevación negativa).

12. HeartDisease: Indica si el paciente tiene alguna enfermedad del corazón (1: Tiene enfermedad del corazón, 2: No tiene enfermedad del corazón)

OTROS FACTORES A TENER EN CUENTA

Los datos estudiados son de pacientes que fueron al médico por problemas que podían ser causados por una enfermedad del corazón, de modo que no es una población representativa para todo el mundo, sino que debe tenerse en cuenta el factor de que los pacientes estudiados ya tenían una alta probabilidad de tener enfermedades del corazón.

Análisis exploratorio de los datos

Limpieza inicial de los datos

Buscamos valores nulos:

En este dataset no tenemos valores nulos.

Aún así, vamos a buscar valores anormales. Para hacerlo, mostraremos qué columnas tienen valores igual a 0, y analizaremos si tiene sentido éste valor.

Podemos ver que hay varias columnas con valores igual a 0.

Para las columnas FastingBS y HeartDisease, es normal tener valores igual a 0, dado que son variables booleanas.

En la columna Oldpeak también tenemos valores igual a 0, pero ello es debido a que la distrubución va desde rangos negativos hasta rangos postitivos, con lo que es normal tener valores igual a 0.

Finalmente, tenemos la columna del colesterol, en la cual el valor 0 no es posible, dado que no es posible tener un colesterol igual a 0, y el hecho de que aparezcan estos datos puede ser debido a que haya un fallo en la recolección de los datos. También tenemos una fila con un 0 en la columna RestingBP, lo cual to tiene sentido, dado que las pulsaciones no pueden ser igual a 0 para una persona viva.

Así pues tenemos que decidir qué hacemos con estas filas. Para la columna Cholesterol, dado que hay 172 filas con colesterol igual a 0, éstas representan un 19% del total de filas, con lo cual es un valor lo suficientemente bajo como para que no tengamos que eliminar la columna. Tal y cómo hemos visto en la Figura 1, los datos no están ordenados, de modo que para realizar una sustitución de forma aleatoria, vamos a sustituir cada 0 por el anterior valor distinto a 0 en la columna. En el caso de la columna RestingBP, como sólo tenemos una fila con valor igual a 0, simplemente eliminaremos esa observación.

Análisis del impacto de la edad

En estos gráficos mostramos, en el primero, la distribución de la edad de la población sobre la que se ha hecho el estudio, y en el segundo, la misma distribución, pero separando entre personas con alguna ECV y personas sin ninguna ECV.

Como podemos ver, por debajo de los 30 años, aunque hay pocos datos, se ve claramente como no hay ningún caso de ECV. A medida que aumentamos el rango de edad, vemos que entre los 30 y los 45, aunque ya se observan más casos, el total de observaciones de pacientes con ECV se encuentra por debajo del 50%. Si nos fijamos en el rango de 45 a 55, el recuento está sobre el 50%, y a partir de los 55 años, vemos cómo el porcentaje de pacientes con ECV aumenta considerablemente, sobretodo a partir de los 70 años, donde ya más de tres cuartas partes de los pacientes observados tienen alguna ECV.

Vemos que la distribución de los pacientes según su sexo es bastante similar, con la media de edad de las mujeres siendo un par de años inferior a la de los hombres. Sin embargo, cuando discriminamos los datos según si tienen enfermedades del corazón o no, observamos que ésto se invierte, siendo la media de edad de las mujeres con enfermedades del corazón ligeramente superior a la de los hombres, lo que puede significar que los hombres tienen más riesgo de desarrollar enfermedades del corazón siendo más jovenes que las mujeres.

Estos gráficos nos indican que, a mayor edad, mayor es el pulso cardíaco en reposo, y a mayor ritmo cardíaco en reposo, mayor es la probabilidad de desarrollar una ECV. Aún así, es posible que ésto no tenga ningún impacto signigicativoen el desarrollo de ECV, dado que las líneas de tendencia son paralelas, de modo que lo que impacta es la edad, así que, para el estudio de posibles ECV, es posible que estas dos variables esten autocorrelacionadas.

A medida que aumenta el colesterol, se disminuye la edad de los pacientes con enfermedades del corazón, y se puede ver claramente que aquellos pacientes con un nivel de colesterol extremadamente alto (superior a 400), tienen muchas probabilidades de sufrir enfermedades del corazón, independientemente de la edad que tengan.

A mayor edad, mayor probabilidad de tener los niveles de azúcar en sangre elevados. En cuanto al impacto del nivel de azucar en sangre, en relación a la edad y la probabilidad de tener una enfermedad del corazon, vemos que no tiene una afectación observable.

Si el paciente tiene una anomalía ST o LVH, tiene altas probabilidades de desarrollar una enfermedad en el corazón, sobretodo a partir de los 50 años. En caso de tener un ECG normal, las probabilidades de desarrollar una ECV no sólo se reducen, sino que también se distribuyen de forma más uniforme a lo largo de todo el rango de edad.

A mayor edad, menor es el pulso máximo del corazón, y un pulso máximo del corazón bajo hace que la probabilidad de tener una enfermedad del corazón aumente, con lo que el pulso máximo puede ser una causa de enfermedad del corazón.

En ésta comparativa podemos ver que, a mayor edad, más probable es que se induzca una angina mediante el ejercicio físico. Aún así, el hecho de que aparezca una angina mediante el ejericio, no parece tener impacto en la probabilidad de desarrollar una ECV.

Cuando comparamos el segmento T del ECG con la edad, observamos que a partir de los 50 años, aumentan considerablemente las observaciones en las que se ve un segmento T con valores superiores a 0, mientras que en gente más joven, la distribución tiende más a estar en 0. Al analizar el impacto de este segmento T, observamos que, a medida que se aleja del 0 (ya sea en positivo o en negativo), se incrementa muy notablemente la probabilidad de sufrir una ECV.-

CONCLUSIONES DIMENSIÓN EDAD

Hasta ahora hemos visto el impacto de la edad en distintos factores de riesgo, y hemos podido observar claramente que con la edad, aumentan muchos de los indicadores de riesgo, de modo que, a mayor edad, mayor riesgo de tener alguna ECV.

Análisis del impacto del sexo

En esta distribución, podemos observar que la mayoría de la población estudiada son hombres. Además, cuando discretizamos entre personas con ECV o sin ellas, podemos ver que en el caso de los hombres la proporción de pacientes con alguna ECV es muy elevada, mientras que en el caso de las mujeres es notablemente baja.

Al observar los tipos de dolor de pecho, vemos que la distribución es bastante similar entre hombres y mujeres cuando no tienen ninguna enfermedad cardiovascular, en cambio, para los pacientes con ECV, vemos que, aunque para ambos géneros la mayor parte no tiene ningun síntoma de éste tipo, en el caso de los hombres vemos que hay más casos con dolor de pecho que en las mujeres, en las que prácticamente no se observa ningún tipo de dolor de pecho.

Mientras que la distribución es bastante similar entre hombres y mujeres, las mujeres necesitan tener un pulso en reposo mayor que los hombres para tener las mismas probabilidades para desarrollar una enfermedad del corazón, mientras que en el caso de los hombres, tienen una elevada probabilidad de tener una enfermedad del corazón aún teniendo un pulso en reposo en unos valores normales.

Lo primero que observamos al ver la distribución del colesterol separado por sexos es que, mientras en los hombres se concentra principalmente alrededor de 200, en las mujeres se ven unos valores más distribuidos y ligeramente superiores, encontrándose la mayoría entre 200 y 300. Al analizar los casos de ECV, vemos que, mientras que en los hombre, la mayotía de casos se encuentra con unos valores cerca de 200, y los casos sin ECV estan por encima de 200, en las mujeres, los valores se distribuyen de forma prácticamente uniforme desde 200 hasta 300, de forma que parece ser que, mientras que en los hombres, el colesterol no tiene mucho impacto en las ECV, en las mujeres sí podemos ver como a mayor colesterol, mayor es la probabilidad de sufrir una ECV.

En el caso del nivel de azúcar en sangre, no vemos un gran impacto, y lo único que puede llamarnos la atención es que en el caso de los hombres, cuando el nivel de azucar es alto, aumentan ligeramente las probabilidades de tener una enfermedad del corazón, pero tampoco es algo que se vea de forma clara.

Para los resultados del electrocardiograma en reposo, no se pueden observar grandes diferencias entre sexos más allá de que las mujeres tienen una ligera tendencia superior a los hombres a mostrar una hipertrofia ventricular, pero sin demasiado impacto. Lo que sí que es curioso, es que en el caso de los hombres con alguna ECV, la proporción de observaciones con un ECG normal es muy elevada, con lo cual puede ser más dificil para éste sexo el hacer un diagnóstico claro con sólo un EGC, y aunque esta prueba puede aportar una información realmente valiosa, hay más variables a tener en cuenta.

Ya habíamos visto que cuanto menor fuese el pulso máximo, más probabilidades había de tener una enfermedad del corazón.

Lo primero que podemos observar aquí es que, en general, los hombres tienen el pulso máximo por debajo de el de las mujeres. Aún así, podemos observar que las mujeres no necesitan tener un pulso máximo tan bajo como los hombres para tener las mismas probabilidades de desarrollar una enfermedad del corazón, dado que con las mujeres, el pico de la distribución de las pacientes con enfermedades del corazón está en aproximadamente 150 pulsos por minuto, mientras que en los hombres está en 125 pulsos por minuto.

A diferencia de lo que hemos visto en el caso anterior, aquí podemos ver claramente como el hecho de que aparezca una angina inducida, es un claro indicador de que puede haber una ECV, aunque el hecho de que no aparezca tampoco sirve para descartar una enfermedad de tal tipo. En cuanto a la separación entre géneros, éste indicador es mucho más claro para los hombres, mientras que para las mujeres, el hecho de que no aparezca sí que tiene más peso en deducir que las probabilidades de que no exista una ECV son elevadas.

0 o ligeramente positivo: sin enfermedad. el resto: con enfermedad. Hombres tienden a Oldpeak superior a las mujeres. Al comparar el segmento T entre hombres y mujeres, vemos que las mujeres tienen una elevada concentración de casos en los que el segmento T es 0, y los casos que se salen de este valor, no se distancian mucho. En cambio, en los hombres, vemos como los valores se distribuyen más a lo largo del rango entre 0 y 3.

Este indicador podemos ver que tiene un alto impacto en las ECV, dado que mientras que los casos con el segmento T tienden a ser negativos en ECV, los casos con ECV tienen unos valores del segmento T mucho más distribuidos, de forma que, con esta variable en concreto, los hombres presentan un riesgo superior a sufrir una ECV por el hechode tener mayor tendencia a distanciarse del 0.

Finalmente, observamos la elevación del segmento T, en la que vemos que hay una distribución muy similar entre sexos, tanto para los casos sin ECV, como con los casos con ECV, con lo que, aunque la variable en sí nos aporta información de valor, no es preciso estudiarla ahora y lo haremos más adelante, sin necesidad de discriminar entre sexos.

CONCLUSIONES SEXO

En este sector hemos observado, principalmente que los hombres tienen mayor riesgo a sufrir una ECV que las mujeres, sobretodo si nos centramos en las variables del segmento T, el axucar en sangre, las pulsaciones máximas o la angina inducida.

Sin embargo, para las mujeres, en cuanto aumenta el pulso mínimo en reposo o el colesterol, su riesgo a sufrir una ECV aumenta de forma muy considerable.

Análisis del impacto del tipo de dolor pectoral

En estos gráficos en los que vemos la distribución de los tipos de dolor de pecho de cada paciente, observamos que, en la mayoría de los casos, no existe ningún tipo de dolor en el pecho, y lo que es aún más curioso y puede plantear un reto es que si nos fijamos en los casos en los que existe una ECV, la proporción de casos sin ningún tipo de dolor pectoral se dispara, de forma que el tipo de dolor en el pecho puede ser un factor que puede llevar a confusión tanto a los médicos como a los propios pacientes, y por ello será interesante observar cómo se relaciona esta variable con las otras para poder ver si hay alguna causa subyacente a éste dolor, tanto si está relacionada con una ECV como si no lo está.

Si separamos el tipo de dolor pectoral a lo largo del rango de edad, vemos que hay una distribución bastante clara en la que cada rango de edad tiene un tipo de dolor. Se observa que tanto el dolor atípico de angina como los casos sin dolor de angina se dan mayoritariamente en personas con una edad por debajo de los 55 años. En cambio, los pacientes asintomáticos tienen la mayor parte de la distribución sobre los 60 años, y finalmente, el dolor de angina típico se distribuye a lo largo de todo el rango de edad, pero con su pico en la personas mayores de 60 años.

El único impacto que se observa al tener en cuenta el dolor pectoral junto con la edad, es que para los pacientes con un dolor atípico de angina, a partir de los 55 años se dispara su probabilidad de sufrur una ECV. En los otros casos, la distribución de edad es bastante similar a cuando no discriminabamos entre pacientes con y sin ECV.

Si comparamos los tipos de dolor pectoral junto con las pulsaciones en reposo, observamos que en todos los casos de dolor pectoral excepto con el dolor típico de angina, las pulsaciones tienen una distribución bastante similar. En el caso del lolor típico de angina, las pulsaciones en reposo aumentan considerablemente.

También observamos que cuando hay un dolor típico de angina, el hecho de tener las pulsaciones altas supone un alto riesgo para tener una ECV, mientras que en los otros casos, no parece que haya un gran impacto de éstas a la hora de tener una ECV.

En estos gráficos vemos la comparativa entre los tipos de dolor pectoral y las pulsaciones máximas, y podemos ver ciertas diferencias en algunos de los campos. En el dolor atípico de angina, las pulsaciones máximas son muy elevadas, lo cual tiene sentido, dado que antes hemos visto que éste tipo de dolor se daba en pacientes más jóvenes, los cuales tienen mayor capacidad para tener altas pulsaciones. En el resto de casos, las pulsaciones máximas se distribuyen de forma bastante similar, aunque para los casos asintomáticos, las pulsaciones máximas se reducen ligeramente.

La única información que nos aporta la separación entre pacientes con y sin ECV, es que los pacientes con mayores pulsaciones máximas tienen menor riesgo a sufrir una ECV, pero no se ve ningún impacto en la separación entre tipos de dolor pectoral.

La comparativa entre el resultado del ECG y los tipos de dolor pectoral no nos aporta ninguna información de valor.

En el caso de la comparativa entre los tipos de dolor pectoral y la presencia de angina inducida, no vemos que tengan gran impacto una variable con la otra.

Lo que sí que podemos observar, es que las personas con angina inducida tienen alto riesgo de ECV, aunque no tengan dolor pectoral.

Para la comparativa entre el segmento T y el tipo de dolor pectoral, vamos que las personas con dolor atípico de angina tienen el segmento T muy concentrado alrededor de 0, y para el resto de casos, está distribuido de forma más uniforme entre 0 y 2.

Vemos también que para las personas con dolor típico de angina, el segmento T no tiene impacto en el riesgo. Para el resto de casos, si el segmento T se distancia de 0, existe un alto riesgo de ECV.

CONCLUSIONES TIPO DE DOLOR PECTORAL

Para este sector, hemos visto que, para muchas variables, el tipo de dolor pectoral no tenía influencia en el aumento de riesgo de ECV, aunque también es debido a que tenemos una gran cantidad de observaciones de pacientes con ECV que son asintomáticos en cuanto a el dolor pectoral.

Donde sí hemos visto un impacto ha sido en la relación entre el segmento T y el dolor pectoral, dado que mientras que cuando no hay un dolor típico de angina, el tener el segmento T cercano a 0 reduce drásticamente la probabilidad de tener una ECV, cuando existe un dolor típico de angina, ésta varianble deja de ser relevante y se puede sufrir o no una ECV independientemente del valor del segmento T.

Análisis del impacto de los resultados de los análisis de sangre

Aquí vemos la distribución del nivel de colesterol en sangre, y vemos que el pico de la distribución está sobre 200.

Podemos ver también claramente, que cuando los valores del nivel de colesterol aumentan, sobretodo a partir de 300, aumenta el riesgo de sufrir una ECV.

Para la variable de el nivel de azúcar en sangre, vemos que, mientras que hay casi 700 observaciones con valores normales de azúcar en sangre y 200 para valores elevados, cuando nos fijamos en los casos con ECV, hay algo más de 300 casos con niveles normales de azúcar en sangre, y casi 200 casos con niveles elevados, de forma que podemos ver que el hecho de tener un nivel elevado de azúcar en sangre, aumenta consideramblemente el riesgo de sufrir una ECV.

No podemos ver una relación entre estas dos variables.

CONCLUSIONES ANÁLISIS DE SANGRE

Ambas variables tienen un elevado impacto en el riesgo de sufrir una ECV, aunque no se observa una gran correlación ellas.

Análisis del impacto de los resultados del electrocardiograma

La distribución de las pulsaciones en reposo es una distribución normal, con si pico alrededor de 130.

Se puede observar que a medida que aumentan éstas pulsaciones en reposo, mayor es el riesgo de sufrir una ECV.

La distribución de las pulsaciones máximas, tiene su pico alrerdedor de 160, aunque la mayoría de valores se encuentran entre 120 y 170.

Se ve claramente que a mayores pulsaciones máximas, menor es el riesgo de sufrir una ECV.

La distribución del segmento T, se encuentra mayoritáriamente concentrada en el 0, que es su valor normal, y podemos ver que a medida que se aleja de éste valor, aumentan drásticamente los casos de ECV.

La mayor parte de los pacientes observados mostraron un ECG normal, sin embargo, vemos que cuando el ECG sale de los valores normales, aumenta ligeramente el riesgo de ECV.

Aunque observamos que hay más casos en los que no hay una angina inducida, hay más casos de ECV que han presentado una angina inducida que casos que no lo han hecho.

La mayor parte de las observaciones muestran una elevación del segmento T hacia arriba o plana, y los casos de más riesgo de ECV son tanto la plana como hacia abajo.

Aquí vemos cómo se relacionan las variables pulso máximo y pulso en reposo, y no parece que tengan un gran impacto la una con la otra. Al fijarmos en la separación entre casos con y sin ECV, vemos que a mayores pulsaciones en reposo y a menores pulsaciones máximas, mayor es el riesgo de tener alguna ECV.

No se aprecia una relación entre estas dos variables.

Aquí podemos ver que a medida que aumentan las pulsaciones máximas, más se acerca el segmento T a 0, con lo cual se reduce el riesgo de tener alguna ECV.

En cuanto a la comparativa entre el resultado del ECG y las pulsaciones en reposo, no se puede ver ninguna información interesante más alla de que para un ECG normal, las pulsaciones en reposo son ligeramente más bajas.

En esta comparativa, podemos observar que para un electrocardiograma normal, las pulsaciones máximas son ligeramente superiores a cuando existe una onda ST-T anormal, pero aún son más elevadas cuando hay una hipertrofia ventricular. Sin embargo, cuando existe una hipertrofia ventricular, aun teniendo unas pulsaciones elevadas, sigue existiendo riesgo a tener una ECV.

En este caso no vemos que haya relación entre el resultado del ECG y la elevación del segmento T. Sin embargo, sí que vemos que para una elevación del segmento T plana, hay muchas probabilidades de tener una ECV, aunque el resultado del ECG sea normal.

Aquí podemos ver que para un ECG con una onda ST-T anormal, hay muchas probabilidades de tener una angina inducida, y esta anggina inducida es un fuerte indicador de las ECV. La relación entre un ECG normal y con hipertrofia ventricular y la angina inducida, no parece ser clara.

Para la elevación del segmento T en comparación con la angina inducida, vemos que cuando la elevación es plana o hacia abajo, hay muchísimas más probabilidades de que se muestre una angina inducida, y ya hemos comentado anteriormente que cuando hay angina inducida, es muy probable que el paciente tenga una ECV.

CONCLUSIONES RESULTADOS DEL ECG

En este sector, hemos analizado y comparado distintas variables derivadas del resultado del ECG, y hemos visto varias cosas que nos pueden aportar información.

Podemos ver que en cuanto a las pulsaciones, cuando las pulsaciones en reposo son elevadas o cuando las pulsaciones máximas son bajas, aumenta la probabilidad de tener una ECV. Aún así, no observamos una clara relación entre estas dos variables. Para el segmento T, cuando éste se aleja de 0, o la elevación es plana o hacia abajo, aumenta la probabilidad de mostrar una ECV. Además, vemos que cuando las pulsaciones máximas son altas, el segmento T tiende a estar cerca de 0. También hemos visto que, cuando el resultado del ECG muestra una onda ST-T anormal, hay más porcentaje de observaciones con ECV que con el resto de resultados, y la pulsación máxima se reduce. Cuando el ECG muestra una hipertrofia, la pulsación máxima aumenta. Además, vemos que cuando hay este tipo de resultados, es más probable mostrar una angina inducida. Continuando con la angina inducida, cuando ésta se produce, las probabilidades de observar una ECV aumenta drásticamente, y ésta se muestra también cuando la elevación del segmento T es plana o hacia abajo.

Mapa de correlación

Al centrarnos en el mapa de correlaciones, vemos que hay relaciones entre variables que hemos comentado anteriormente.

En cuanto a las principales causas de ECV, vemos que son el valor del segmento T, las pulsaciones máximas y, en menor medida, la edad y el nivel de azúcar en sangre.

También vemos como están fuertemente correlacionadas la edad con las pulsacines en reposo, con las pulsaciones máximas y con el valor del Segmento-T.

CONCLUSIONES FINALES DEL EDA

Al estudiar el impacto de la edad tanto en el efecto que tiene en las ECV como al compararla con otras variables, hemos visto que claramente, a mayor edad, mayor riesgo de ECV y mayor riesgo de que aumenten los indicadores de riesgo para las ECV.

En cuanto a las comparativas entre sexos, hemos visto que los hombres tienen mayor riesgo a sufrir una ECV que las mujeres, sobretodo si nos centramos en las variables del segmento T, el axucar en sangre, las pulsaciones máximas o la angina inducida. Sin embargo, para las mujeres, en cuanto aumenta el pulso mínimo en reposo o el colesterol, su riesgo a sufrir una ECV aumenta de forma muy considerable.

Si nos fijamos en el tipo de dolor pectoral, podemos ver que no tiene muchai influencia en el riesgo de sufrir una ECV,, aunque no podemos sacar conclusiones seguras, debido a que la mayoría de las observaciones no presentan dolor pectoral.

Donde sí hemos visto un impacto ha sido en la relación entre el segmento T y el dolor pectoral, dado que mientras que cuando no hay un dolor típico de angina, el tener el segmento T cercano a 0 reduce drásticamente la probabilidad de tener una ECV, cuando existe un dolor típico de angina, ésta varianble deja de ser relevante y se puede sufrir o no una ECV independientemente del valor del segmento T.

Viendo los resultados de las analíticas de sangre, hemos podido ver que tanto el colesterol como el nivel de azúcar en sangre tienen un elevado impacto en el riesgo de sufrir una ECV, aunque no se observa una gran correlación ellas.

En el sector de los resultados del electrocardiograma, hemos analizado y comparado distintas variables derivadas del resultado del ECG, y hemos visto varias cosas que nos pueden aportar información.

Hemos observado que, en cuanto a las pulsaciones, cuando las pulsaciones en reposo son elevadas o cuando las pulsaciones máximas son bajas, aumenta la probabilidad de tener una ECV. Aún así, no observamos una clara relación entre estas dos variables. Para el segmento T, cuando éste se aleja de 0, o la elevación es plana o hacia abajo, aumenta la probabilidad de mostrar una ECV. Además, vemos que cuando las pulsaciones máximas son altas, el segmento T tiende a estar cerca de 0. También hemos visto que, cuando el resultado del ECG muestra una onda ST-T anormal, hay más porcentaje de observaciones con ECV que con el resto de resultados, y la pulsación máxima se reduce. Cuando el ECG muestra una hipertrofia, la pulsación máxima aumenta. Además, vemos que cuando hay este tipo de resultados, es más probable mostrar una angina inducida. Continuando con la angina inducida, cuando ésta se produce, las probabilidades de observar una ECV aumenta drásticamente, y ésta se muestra también cuando la elevación del segmento T es plana o hacia abajo.

Preparación de los datos:

En esta fase, vamos a realizar una limpieza de los datos. Además, los acomodaremos para que sean una buena entrada para el modelado de forma que podamos obtener unos buenos resultados. Para ello, realizaremos tareas de normalización, discretización, feature engineering como PCA o SVD, y todo aquello que sea necesario para poder tener la máxima precisión en el modelado.

Discretización de los datos

AgeDisc

Vamos a discretizar la variable edad siguiendo el siguiente criterio: 0: <45 | 1: >=45 & <55 | 2: >=55 & <70 | 3: >70

Discretizamos el segmento T siguiendo el criterio en el que consideraremos que si está encima de -1 y por debajo de 0.5, lo consideraremos normal (0), y para el resto de valores, lo consideraremos anormal (1).

Discretizamos las pulsaciones máximas, y asignamos un 0 si están por debajo o son iguales a 130, y un 1 si están por encima.

Conversión de datos discretos

En este apartado, asignaremos valores numéricos a todas las variables categóricas que tenían valores de tipo texto.

Volvemos a analizar cómo se correlacionan las variables ahora que tenemos variables discretizadas que las variables categóricas se pueden calcular.

Vemos que al discretizar la edad y el segmento T, aumenta su correlación con la variable ECV, aunque no es así con las pulsaciones máximas.

Podemos cer también que la mayoría de las variables categóricas tienen una elevada correlación con las ECV, de modo que será interesante tenerlas de forma numérica para poder introducirlas en los modelos.

Normalización y escalado de los datos

Ahora normalizamos y escalamos los datos para que sean una entrada de mayor calidad y de este modo le podamos facilitar los cálculos al modelo.

Colesterol:

Segmento T:

Pulsaciones máximas:

Edad:

Pulsaciones en reposo:

Volvemos a analizar las correlaciones para ver si hemos mejorado tras la normalización y el escalado:

Aunque no se observa una gran mejora, sí que mejoramos la entrada del algoritmo, de modo que nos será útil mantener estas variables.

PCA

Creamos una función que nos sirva para hacer el PCA cambiando las variables que se tienen en cuenta.

Variables iniciales numéricas sin tratar

feats = ['Age', 'RestingBP', 'Cholesterol', 'FastingBS', 'MaxHR', 'Oldpeak', 'HeartDisease', 'AgeDisc', 'OldpeakDisc', 'MaxHRDisc', 'ChestPainTypeNum', 'SexNum', 'RestingECGNum', 'ExerciseAnginaNum', 'ST_SlopeNum', 'CholesterolNorm', 'OldpeakNorm', 'MaxHRNorm', 'AgeNorm', 'RestingBPNorm'] analisisPCA(feats, data)

Hacemos el PCA ahora teniendo en cuenta las variables discretizadas.

Ahora con las variables normalizadas.

También con las variables categóricas.

Vemos como los mejores resultados los hemos obtenido cuando hemos usado las variables Edad (normalizada), Pulsaciones máximas (normalizadas), Segmento T (discretizado) y Colesterol (discretizado), dado que sólo con el primer componente principal, ya explicamos el 40% de la varianza.

También hemos obtenido buenos resultados con las variables Edad (discretizada), Sexo, Pulsaciones máximas (normalizadas), Segmento T (discretizado), Tipo de dolor pectoral, Angina inducida y elevación del Segmento T, con resultados similares a cuando hemos usado las variables anteriores.

Modelado

En esta segunda práctica, vamos a realizar la parte del modelado usando los datos de la práctica anterior.

Para realizar el modelado, usaremos las variables que hemos visto que mejores resultados nos daban en la práctica anterior. Éstos son:

Empezamos importando todas las librerías necesarias:

Modelos no supervisados

Ahora vamos a realizar un modelo no supervisado de tipo K-Means.

Podemos observar que según el cálculo de la media de distancia entre los puntos y el ccentroide, lo más optimo es realizar un modelo con 2 clústers, lo cual tiene mucho sentido, dado que nuestra variable target nos indica si el paciente tiene alguna ECV o no, de modo que es una variable booleana (sólo puede ser 0 o 1).

Realizamos el modelado y mostramos los datos por pantalla para poder ver cómo ha realizado la clasificación el modelo.

A primera vista vemos buenos resultados, pero recordemos que es un algoritmo no supervisado, de modo que vamos a usar métricas de éste tipo para ver la calidad del modelo.

Como vemos, este modelo con 2 clústers nos proporciona una Silhouette de 0.278 que, aunque está muy lejos de ser un resultado perfecto, para ser datos tan entremezclados como hemos visto que son estos, podemos decir que es un buen resultado.

Hacemos ahora la prueba con 4 clústers.

Aquí vemos que los clústers están muy entremezclados y no se aprecia ningún patron visual que pueda indicarnos que las separaciones son correctas.

Vemos pues, que con 4 clústers obtenemos una puntuación de Silhouette de 0.141, la cual es notablemente peor que con 2 clústers.

Finalmente, realizamos la prueba con 3 clústers.

Al calcular la métrica Silhouette vemos que, aunque se acerca a los niveles obtenidos con 2 clústers, el modelo no llega a ser tan bueno.

Otra métrica (Davies Bouldin)

Con ésta métrica podemos ver que el modelo con 3 clústers tiene mejor resultado de proximidad, lo cual puede ser algo interesante a investigar en otro momento.

DBSCAN + OPTICS

Vamos a hacer ahora un modelo DBSCAN y un modelo OPTICS.

DBSCAN

Si hacemos el modelo con una $\epsilon$ de 0.5 y un mínimo de 25 muestras, aunque vemos que nos genera los clústers que necesitamos, la nube de puntos y de observaciones que el modelo considera outliers es muy dispersa, y no aporta información relevante. Además, la métrica Silhouette está muy cercana a 0, lo cual indica que los clústers se superponen unos encima de otros. Así pues, probaremos con otros parámetros.

Manteniendo el mínimo de observaciones pero cambiando la $\epsilon$ a 1, vemos que mejora bastabte el modelo y ya se observa una separación más clara a simple vista incluso al comparar distintas variables. Sin embargo, al observar la métrica Silhouette, vemos algo que tambiéne se puede ver en las gráficas, que es la superposición de los clústers, aunque no es tan exagerada como en el caso anterior.

OPTICS

Vamos a ver ahora la alcanzabilidad de este modelo mediante OPTICS.

Con unos parámetros demasiado altos, casi ninguna observaciónn entra en algun clúster.

Con unos parámetros demasiado pequeños, vemos que hay muchas observaciones que no se encuentran en nuestra función y se crean demasiados clústers.

En un punto intermedio, vemos que se sigue una forma en la que se ven claramente 2 clústers que se pueden formar.

Con los valores $\epsilon$ = 1 y como mínimo 25 observaciones en cada clúster, se observan unos buneos niveles de alcanzabilidad y se ven clústers bastante definidos y acorde con la realidad.

Árboles de decisión

Vamos a modelar ahora un árbol de decisión que nos genere unas reglas para, poniéndonos en la piel de un médico, que con unas pocas pruebas o preguntas pueda hacer ya una estimación de si el paciente tiene una ECV o no.

Reglas del modelo

Podemos observar que la primera gran separación está en la variable de la elevación del segmento T, donde vemos que en los casos en los que ésta esté haca arriba (la primera columna), las probabilidades de que el paciente tenga una ECV se reducen muchísimo, y sólo se ven incrementadas cuando su Segmento T se distancia de 0 (en la variable 'OldpeakDisc').

Sin embargo, cuando la elevación del Segmento T sea plana o hacia abajo, las probabilidades de desarrollar una ECV se disparan, y sólo se ven reducidas según el tipo de dolor pectoral que experimente el paciente.

En éste ejemplo vemos un caso bastante claro de un paciente con ECV, que no sólo tiene la elevación del Segmento T plana sinó que además sus pulsaciones máximas son bastante bajas (algo que normalmente está relacionado con la edad, tal y como vimos en la práctica anterior).

Podemos observar que éste modelo tiene una Score bastante alta, de 83%.

Por otro lado, en este caso creemos que lo más significativo para tener en cuenta son los falsos negativos, dado que en caso de que se diese un falso negativo, un paciente podría no ser intervenido o explorado en mayor profundidad y se podría agravar la ECV, mientras que en el caso de los falsos positivos, sólo habría el inconveniente que se deberían realizar más pruebas posteriormente para descartar la existencia de éste tipo de enfermedad.

Así pues, con éste árbol, hemos conseguido un porcentaje de falsos negativos del 13% aproximadamente, lo cual nos indica que, aunque es un buen modelo, no debería usarse como único método, sino quizas, como primera aproximación.

Otro enfoque algorítmico (KNN)

Ahora vamos a realizar otro enfoque en el que usaremos el algoritmo KNN, y compararemos los resultados al utilizar distintos parámetros.

Empezamos con 250 Neighbours:

Podemos ver que con 250 Neighbours, la Score del modelo es de 78.74%, mientras que tenemos un 8.4% de falsos negativos, lo cual es una mejora respecto al árbol anterior. Sin embargo, podemos ver como han aumentado considerablemente los falsos positivos (41.4%)

Modelamos ahora con 150 Neighbours:

En este caso nos pasa al revés, dado que aumenta la Score del modelo, pero también aumentan los falsos negativos, aunque se han reducido notablemente los falsos positivos hasta aproximadamente el 25%.

Finalmente, hacemos la prueba con 350 Neighbours:

Finalmente, con 350 neighbours, se vuelven a reducir tanto la Score como los falsos negativos, pero se mantienen aproximadamente los falsos positivos.

En resumen, podemos ver que a medida que aumentamos los neighbours, reducimos los falsos negativos a cambio de aumentar los falsos positivos y reducir la Score del modelo, de modo que dependiendo de lo que se quiera conseguir, habrá que utilizar unos u otros parámetros.

Limitaciones y riesgos

Hemos visto que con los datos que tenemos, lo primero de todo y más importante es hacer una adaptación para que se acomoden lo mejor posible al modelo, y aún así, no obtenemos unos resultados ni mucho menos perfectos, aunque sí que mejoran mucho que si tan sólo utilizásemos las observaciones iniciales o un EDA.

Siguiendo con los datos, hemos podido ver que usando las variables que tienen los médicos para poder diagnosticar una ECV, es muy difícil conseguir un correcto diagnóstico, aún adaptando los datos y usando modelos y algoritmos avanzados, lo cual pone en valor la labor que éstos realizan al hacer diagnósticos con unas variables y observaciones que no crean claramente dos grupos separados entre pacientes con ECV y pacientes sin éstas, sino que vemos muchas observaciones entremezcladas y pacientes que a priori podría parecer que tienen una ECV, resulta que no la tienen y otros que aparentemente están sanos, tienen una ECV contra todo pronóstico.

Otra consideración a tener en cuenta, es que éste conjunto de datos tiene un cierto sesgo, dado que la distribución no es la habitual entre la población tanto a nivel de sexo, de edad, etc., pero sobretodo al ver la cantidad de observaciones de pacientes con ECV, dado que vemos que aproximadamente la mitad de las observaciones tienen una ECV, lo cual en la población real esto no ocurre, lo que hace pensar que se han tomado observaciones de pacientes de los cuales ya había una primera sospecha de que tuviesen algún tipo de patología de éste tipo y se haya realizado ya un primer filtro que no nos permita hacer el modelo más preciso.

Finalmente, es importante tener en cuenta el principal riesgo que puede suponer un modelo de éste tipo, y es que puede darse el caso de que aparezcan falsos negativos, de forma que se podría dar el alta a pacientes que realmente tuviesen una ECV, posibilitando así el hecho de que ésta se agravase o que no se puediese combatir a tiempo, de modo que, aunque éste tipo de modelos avanzan a pasos agigantados, en el campo de la medicina (así como en muchos otros campos), éstos modelos deban ser una herramienta que sirva para ayudar al profesional, pero nunca un sustituto de éste profesional, dado que es quien debe tener la última palabra.

Conclusiones práctica 1

En esta práctica hemos hecho un planteamiento de lo que podría ser un problema real, en el que hemos hecho toda la preparación previa de un juego de datos antes de la aplicación del modelado.

El problema que hemos decidido plantear ha sido el de las enfermedades cardiovasculares (ECV) y cuáles pueden ser sus principales causas o sus indicadores de riesgo. Hemos decidido hacer este estudio dado que las ECV son la principal causa de muerte en todo el mundo, de modo que consideramos importante saber cuales pueden ser sus raíces ya sea o bien para prevenirlas, o bien para detectarlas sa tiempo y así poder tratarlas a tiempo.

En primer lugar hemos importado y descrito los datos, y luego hemos hecho una limpieza de los datos, aunque el dataset ya venía con los datos muy bien acomodados.

Luego hemos realizado un análisis exploratorio de los datos viéndolos desde distintas perspectivas o dimensiones para poder ver cómo se relacionan los datos tanto entre sí como en relación a las ECV. Las principales conclusiones que hemos podido sacar han sido que, a primera vista, los factores más decisivos son la edad, el sexo, el nivel de azucar, las pulsaciones máximas, la angina inducida por ejercicio y el segmento T. Un dato curioso que hemos observado ha sido que el colesterol no tiene un impacto muy decisivo.

Luego hemos hecho una acomodación de los datos para facilitar el modelado, y hemos hecho tareas de discretización, conversión de variables categóricas en variables numéricas, normalización y escalado.

Finalmente, hemos realizado un PCA, en el que hemos usado distintos grupos de variables, y hemos observado que las que mejor resultado nos han dado han sido las siguientes: Edad (normalizada), Pulsaciones máximas (normalizadas), Segmento T (discretizado) Colesterol (discretizado), Edad (discretizada), Sexo, Tipo de dolor pectoral, Angina inducida y elevación del Segmento T, de modo que serán variables que deberemos tener en cuenta al realizar el modelado, y ver como interactúan con el riesgo a sufrir una ECV.

En la próxima práctica veremos el modelado de estos datos y a ver cómo de precisas serán nuestras predicciones tras esta preparación de los datos.

Bibliografía

Información Enfermedades Cardiovasculares (Wikipedia)

Información Enfermedades Cardiovasculares (MedlinePlus)

Dataset

PCA en Python (cienciadedatos.net)

Documentación PCA scikit-learn

Silhouette en Python

Davies Bouldin en Python

Uso de DBSCAN en python

OPTICS en python

Matriz de confusión en Python

KNN en python